﻿namespace swe.Core
{
	public interface IStateMachine<out TR>
	{
		/// <summary>
		/// Gets the value indicating wether the state machine is in the ended state.
		/// </summary>
		bool Eos { get; }

		/// <summary>
		/// Gets the current state.
		/// </summary>
		string CurrentState { get; }

		/// <summary>
		/// Gets a value indicating whether this there is a return value.
		/// Return value gets resetted at every new process.
		/// </summary>
		bool HasReturn { get; }

		/// <summary>
		/// Gets the type of the current state.
		/// </summary>
		StateType CurrentStateType { get; }

		/// <summary>
		/// Gets the rturned data.
		/// </summary>
		TR GetRturnData();

		/// <summary>
		/// Processes the state machine.
		/// </summary>
		bool Process();
	}
}